home *** CD-ROM | disk | FTP | other *** search
/ Internet Surfer: Getting Started / Internet Surfer - Getting Started (Wayzata Technology)(7231)(1995).bin / pc / textfile / mac_faqs / tcl_faq / part2 < prev    next >
Text File  |  1995-01-30  |  25KB  |  740 lines

  1. Xref: bloom-picayune.mit.edu comp.lang.tcl:2077 news.answers:4541
  2. Newsgroups: comp.lang.tcl,news.answers
  3. Path: bloom-picayune.mit.edu!enterpoop.mit.edu!spool.mu.edu!caen!malgudi.oar.net!chemabs!lvirden
  4. From: lvirden@cas.org (Larry W. Virden)
  5. Subject: comp.lang.tcl Frequently Asked Questions (2/3)
  6.      (Last updated: November 8, 1992)
  7. Message-ID: <tcl.p2_724079551@cas.org>
  8. Followup-To: comp.lang.tcl
  9. Summary: A regular posting of the comp.lang.tcl Frequently Asked Questions 
  10.     (FAQ) and their answers.  This is the second of three parts.
  11. Originator: lwv26@lwv26aws
  12. Keywords: tcl, expect, extended tcl, wish, tk
  13. Sender: lvirden@cas.org
  14. Supersedes: <tcl.p2_721227419@cas.org>
  15. Reply-To: lvirden@cas.org (Larry W. Virden)
  16. Organization: Chemical Abstracts Service
  17. References: <tcl.p1_724079551@cas.org>
  18. Date: Fri, 11 Dec 1992 13:13:31 GMT
  19. Approved: news-answers-request@MIT.Edu
  20. Expires: Sun, 24 Jan 1993 13:12:31 GMT
  21. Lines: 717
  22.  
  23. Archive-name: tcl-faq/part2
  24. Version: 2.5
  25. Last-modified: November 8, 1992
  26.  
  27. Please do not be offended if I neglect to acknowledge your contribution
  28. to this FAQ!  I sometimes forget to put an attribution in.  I especially
  29. try to add them if it appears that there is further experimentation or
  30. debugging being done though.
  31.  
  32. Index of questions:
  33.  
  34. 7. Questions on building Tcl and friends on your system
  35.     Q7a. Is there anywhere I can find help with the details of getting 
  36.         Tcl to work on my machine?
  37.     Q7b. When I am trying to build Tcl, the link step says that some 
  38.         of the functions Tcl needs are missing.
  39.     Q7c. Has anyone built Tcl 6.2 on an RS/6000 AIX 3.1? 
  40.     Q7d. Has anyone gotten Tcl to compile under HP-UX?
  41.     Q7e. Has anyone gotten Tcl to compile under VMS?
  42.     Q7f. What does it take to get Tcl to compile under SCO Unix?
  43.     Q7g. When I try to run the tclTest I get format and scan errors 
  44.         (NeXT, AIX, etc.)
  45.     Q7h. When I try to run tcl v6.2 tclTest under Irix 4.0.1 I get
  46.         lots of errors.
  47.     Q7i. Does anyone else have problems with Tcl on a Cray?
  48.     Q7j. Does anyone know how to get Tk to run on a SparcBook or other
  49.         laptop with a limited number of colors?
  50.     Q7k. What does it take to get Tcl/Tk to compile on 386bsd/Linux 
  51.         or other Posix/ANSI C systems not already supported?
  52.  
  53. 8.  How, in Tcl, can I XXX:
  54.     Q8a. get association lists or property lists?
  55.     Q8b. call one proc with the multi parameter value returned by 
  56.         another proc?
  57.     Q8c. pass an array into a proc?
  58.     Q8d. pipe output of a command back into a tcl parsing procedure?
  59.     Q8e. merge extended Tcl into other programs such as wish or expect?
  60.     Q8f. delete a procedure from within a script?
  61.     Q8g. get parray to recognize an array variable I have created
  62.         via upvar?
  63.     Q8h. get more than 7 digits of double precision?
  64.     Q8i. grab the command line whenever a non-built-in call is made?
  65.  
  66. 9.  How, in Tk, can I XXX:
  67.     Q9a. get my wish application to execute - I just get a wish prompt!
  68.     Q9b. get an application to also use libXt?
  69.     Q9c. ,using a machine with less than 8 bit color, run?
  70.     Q9d. set X11 resources for a wish application in an app-defaults file?
  71.     Q9e. change the X11 cursor?
  72.     Q9f. raise or lower a window?
  73.     Q9g. re-map a withdrawn window id?
  74.     Q9h. specify bitmap patterns on the command line instead of 
  75.         as a file name?
  76.     Q9i. change the default class bindings?
  77.     Q9j. delete a binding?
  78.     Q9k. change a binding while it is being executed?
  79.     Q9l. bind the arrow key on my Sun keyboard?
  80.     Q9m. resize a listbox?
  81.     Q9n. select two items that are not adjacent in the listbox at 
  82.         one time?
  83.     Q9o. select items in more than one tk listbox at a time?
  84.     Q9p. fill a canvas which is bounded by lines as opposed to a
  85.         shape like a polygon, oval, etc.?
  86.     Q9q. create a scrollable window of buttons?
  87.  
  88. End of FAQ Index
  89.  
  90. ------------------------------
  91. Subject: -7- Questions on building Tcl and friends on your system
  92.  
  93. Subject: -Q7a- Is there anywhere I can find help with the details of 
  94.         getting Tcl to work on my machine?
  95.  
  96. A7a. Glad you asked!  Look in the Tcl distribution for the file called
  97. "porting.notes".  This will contain a collection of notes that various people
  98. have provided about porting Tcl to various machines and operating systems.
  99. There are also a file called "README" which should be read FIRST - before
  100. doing anything else with the code (this should always be one's first
  101. step with any package).  Finally, there is a "changes" file which details
  102. what has changed since the last release - be sure to read this to see
  103. what might need to change in your programs.
  104.  
  105. Subject: -Q7b- When I am trying to build Tcl, the link step says that
  106.         some of the functions Tcl needs (such as strtoul and
  107.         strerror) are missing.
  108.  
  109. A7b. Did you run the "config" program first, by doing a "csh ./config" or
  110. equivalent?
  111.  
  112. Tcl includes equivalents for the following functions and include files
  113. which may not be found on some systems:
  114.  
  115. dirent.h       limits.h          stdlib.h         string.h
  116.  
  117. opendir.c      strerror.c     strstr.c         strtol.c        strtoul.c
  118.  
  119. strtod.c
  120.  
  121. Subject: -Q7c- Has anyone built Tcl 6.x on an RS/6000 AIX 3.1? 
  122.  
  123. A7c.  See porting notes - especially the note about strtoul.
  124.  
  125. One user got Tcl to compile with a few minor source modifications
  126. (for example, duplicate case statements for errno and signal symbols in 
  127. tclUnixStr.c). 
  128.  
  129. A few other problems arose in the tests.  One is caused by AIX printf
  130. not formatting %#x and %#o correctly when the value to be printed is
  131. zero:  they print "0x0" and "00" instead of "0" and "0" respectively.
  132. This was reported as not a problem in earlier releases.  No fixes have
  133. been posted.
  134.  
  135. Finally, a problem occurs in open.test.  test 13.6 hangs because "cat"
  136. on the RS6000 is unbuffered.  A workaround is to change the execution
  137. of "cat" in open.test to do a "cat -u".
  138.  
  139. Dov Grobgeld <dov@menora.weizmann.ac.il> provided info on creating tcl
  140. and tk shared libraries under AIX 3.1.5:
  141.  
  142. For tcl:
  143.  
  144. cc -o tkshar.o *.o -bE:tclshar.exp -bM:SRE -berok -lX11 -lm
  145. ar r libtclshr tclshar.o
  146.  
  147. For tk:
  148.  
  149. cc -o tkshar.o *.o -bE:tkshar.exp -bM:SRE -berok -Ltcl -lX11 -lm -ltclshr
  150. ar r libtkshr tkshar.o
  151.  
  152. where tckshar.exp and tkshar.exp had lists of the external functions.
  153.  
  154. Subject: -Q7d- Has anyone gotten Tcl to compile under HP-UX?
  155.  
  156. A7d. See the porting notes.
  157.  
  158. Subject: -Q7e- Has anyone gotten Tcl to compile under VMS?
  159.  
  160. A7e. Information from: derge@visacrd.ge.com (Gillmer J. Derge)
  161.  
  162. Date: 8 Jan 92 13:44:18 GMT
  163. Reply-To: derge@crd.ge.com
  164. Organization: GE Corporate R&D Center, Schenectady, NY
  165.  
  166. Here's a rough approximation of what I needed to do (pretty minor changes).
  167.  
  168. 1. As discussed in the Makefile, do not compile the files that make
  169. UNIX_OBJS (panic.c, tclEnv.c, tclGlob.c, tclUnixAZ.c, tclUnixStr.c and
  170. tclUnixUtil.c).  Furthermore, define the constant TCL_GENERIC_ONLY at
  171. compile-time.
  172.  
  173. 2. Don't believe everything you read in Makefiles :-) --
  174. TCL_GENERIC_ONLY doesn't really work.  You need to add an ifndef in
  175. tclCkalloc.c before the "#include tclUnix.h".  Also, in tclExpr.c,
  176. there's a reference to TCL_NO_UNIX that should be changed to
  177. TCL_GENERIC_ONLY.
  178.  
  179. 3. Finally, in order to run the test program (the test suite won't
  180. work, see below), you'll need to change the definition of initCmd in
  181. tclTest.c.  I chose the following, which should be more or less
  182. compatible with non-VAX systems:
  183.  
  184. #ifdef TCL_LIBRARY
  185. char *initCmd =
  186.     "if [file exists [info library]/init.tcl] {source [info
  187. library]/init.tcl}";
  188. #else
  189. char *initCmd =
  190.     "format {There is no Tcl library at this installation.  Continuing
  191. anyway.\n
  192. }";
  193. #endif
  194.  
  195.     There are a number of caveats to all this.  First of all, I did
  196. not port tk or Extended Tcl.  Furthermore, I think there may have been
  197. a release that I missed since I did it (6.1 vs 6.0).  Here's the RCS ID
  198. from my tclExpr.c, in case you want to compare yours.
  199.  
  200. static char rcsid[] = "$Header: /sprite/src/lib/tcl/RCS/tclExpr.c,v 1.29\
  201. 91/09/04 15:08:28 ouster Exp $ SPRITE (Berkeley)";
  202.  
  203.     And perhaps most importantly of all, as you may have gleaned
  204. from the compilation instructions, I did not do anything to port the
  205. Unix-related functions.  As a result, the standard test suite will not
  206. work.  You have to just try commands on your own.  I recently got mail
  207. from jkimball@src.honeywell.com (John Kimball) indicating that he may
  208. be working on just that problem.
  209.  
  210.     I've assumed a certain amount of C knowledge in the above.  If
  211. that's an invalid assumption, or your confused for any other reason,
  212. let me know, and I'll try to clear things up.  I'm guessing since you
  213. asked about porting tk and Extended Tcl that I probably haven't taken
  214. this as you would have liked, but maybe I've saved you at least a
  215. little effort.  I hope so.
  216.  
  217. Subject: -Q7f- What does it take to get Tcl to compile under SCO Unix?
  218.  
  219. A7f.    Add a "#undef select" to tkEvent.c, and remove the reference to 
  220. TK_EXCEPTION around line 460 of main.c.
  221.  
  222. Tk uses its own scheme for allocating the border colors for its 3D
  223. widgets, which causes problems when running TK on a system with
  224. "PseudoColor" display class, and a 16-cell colormap.
  225.  
  226. If you can't go to eight bitplanes, you can instead start the server
  227. with a "-static" (Xsco) or "-analog" (Xsight) option, making the
  228. display class become "StaticColor".  This makes the entire colormap
  229. read-only, and it will return the color that most closely maps to the
  230. desired color as possible.
  231.  
  232. This information is from Keith Amann <Keith_Amann@stortek.com>
  233.  
  234. Subject: -Q7g- When I try to run the tclTest I get format and scan errors 
  235.         (NeXT, AIX, etc.)
  236.  
  237. A7g.  That's a problem (scanf/printf) many systems seem to have.  Don't
  238. worry too much about it - just don't use these 'advanced' features.  If
  239. you're hacking C, you'll have the same problems.
  240.  
  241. Subject: -Q7h- When I try to run tcl v6.2 tclTest under Irix 4.0.1 I get 
  242.         lots of errors.
  243.  
  244. A7h. There's a bug in the 4.0.1 optimizer that's fixed in 4.0.2.
  245. Compile tclVar.c using -O0 (no optimization).
  246.  
  247. Subject: -Q7i- Does anyone else have problems with Tcl on a Cray?
  248.  
  249. A7i. See the porting notes for a set of changes mentioned.  Also,
  250. Booker C. Bense <benseb@grumpy.sdsc.edu> reports that version 3.0.1.6
  251. has some real problems with char pointers, causing Tcl to crash.  Using
  252. version 3.0.2.1, things are much better, except for a minor formatting
  253. problem and serious problems with scan.
  254.  
  255. Subject: -Q7j- Does anyone know how to get Tk to run on a SparcBook or other
  256. laptop with a limited number of colors?
  257.  
  258. A7j.  On a SparcBook, if you start openwin (the OpenWindows server starting
  259. command) as:
  260.  
  261. openwin -dev "/dev/fb staticvis"
  262.  
  263. you get a static visual color model that Tk copes with better than the
  264. default.  Some things are ugly, but not as ugly as monochrome.
  265.  
  266. Subject: -Q7k- What does it take to get Tcl/Tk to compile on 386bsd/Linux 
  267.         or other Posix/ANSI C systems not already supported?
  268.  
  269. A7k. Patches for 386BSD were posted to comp.lang.tcl back in Nov. 1992 to
  270. alt.sources.  See one of the ftp archive sites for this group for them.
  271. Basically, there were some setting of defines and a few places where 
  272. const char * had to be used in place of char *.  
  273.  
  274. ------------------------------
  275. Subject: -8-  How, in Tcl, can I XXX:
  276.  
  277. Subject: -Q8a-    association lists or property lists?
  278.  
  279. A8a. Use Extended Tcl arrays or keyed lists.
  280.  
  281. For example, if you did a:
  282.  
  283. keylset ttyFields ttyName tty1a
  284. keylset ttyFields baudRate 57600
  285. keylset ttyFields parity strip
  286.  
  287. And then an "echo $ttyFields", you'd get:
  288.  
  289.     {ttyName tty1a} {baudRate 57600} {parity strip}
  290.  
  291.  
  292. Subject: -Q8b-    call one proc with the multi parameter value returned by 
  293.         another proc?
  294.  
  295. A8b. Assuming y requires multiple args and x returns multiple words, use 
  296.     Tcl's eval command "eval y [x]"
  297.  
  298. Subject: -Q8c-    pass an array into a proc?
  299.  
  300. A8c. With upvar.
  301.  
  302. set argc 2
  303. set argv(0) zero
  304. set argv(1) one
  305. # print elements of an array
  306. proc a {
  307.   foreach element of a
  308.   echo the element
  309. }
  310.  
  311. proc a {arrayName} {
  312.     upvar $arrayName myArray
  313.  
  314.     foreach element [array names myArray] {
  315.        echo $element $myArray($element)
  316.     }
  317. }
  318.  
  319. Extended Tcl introduces a concept called keyed lists which are arrays
  320. made out of lists of key-value pairs and can be passed by value to routines,
  321. over networks, etc.
  322.  
  323. Subject: -Q8d-    pipe output of a command back into a tcl parsing 
  324.         procedure?
  325.  
  326. A8d.  For example, to grep a pattern out of a range of files, one might
  327. do:
  328.  
  329. karl@NeoSoft.com (Karl Lehenbauer) writes:
  330.  
  331. set files [glob /home/cole/stats/*]
  332.  
  333. proc parseInfo { site } {
  334.    global files
  335.  
  336. #
  337. # site is chosen from a listbox earlier
  338. #
  339.    set in [open [concat "|/usr/bin/grep $site $files"] r]
  340.  
  341.    while {[gets $in line]>-1} {
  342.       puts stderr $line
  343.    }
  344.    catch {close $in}
  345. }
  346.  
  347. One thing:  the matching strings are _not_ returned in directory order.
  348.  
  349. But what if I want to check the return code AND use the output of 
  350. the command?  kennykb@dssv01.crd.ge.com (Kevin B. Kenny) writes:
  351.  
  352. if [catch {exec ls} data] {
  353.         # The exec got an error, and $errorCode has its termination status
  354. } else {
  355.         # The exec succeeded
  356. }
  357. # In any case, `data' contains all the output from the child process.
  358.  
  359. Note that Karl Lehenbauer adds that errorCode will be a list containing
  360. three elements, the string "CHILDSTATUS", the process ID of the child,
  361. and the exit status of the child.
  362.  
  363. Subject: -Q8e-    merge extended Tcl into other programs such as wish or expect?
  364.  
  365. A8e. The latest version of extended TCL, tclX 6.2B, has been enhanced to
  366. make it easier to incorporate into applications.
  367.  
  368. Subject: -Q8f-    delete a procedure from within a script?
  369.  
  370. A8f. rename procedureName ""
  371.  
  372. Subject: -Q8g- get parray to recognize an array variable I have created
  373.     via upvar?
  374.  
  375. A8g. Right now (June, 1992) upvar doesn't allow you to attach to an
  376. individual element of an array.  This is considered a bug by 
  377. Mr. Ousterhout and has been place on a bug list.
  378.  
  379. Subject: -Q8h- get more than 7 digits of double precision ?
  380.  
  381. A8h. Modify the tclExpr.c module to use %lf instead of %g.
  382.  
  383. Subject: -Q8i- grab the command line whenever a non-built-in call is made?
  384.  
  385. A8i. The procedure "unknown" is called automatically with arguments 
  386. containing the command and its arguments for any command that couldn't be 
  387. found.  In fact, Tcl and Extended Tcl use this feature to provide demand
  388. loaded commands, and even entire libraries.
  389.  
  390. So by modifying the unknown procedure you can provide your own extended
  391. functionality, or even remove the demand loading capability if you so
  392. desire.
  393.  
  394. ------------------------------
  395. Subject: -9-  How, in Tk, can I XXX:
  396.  
  397. Subject: -Q9a- get my wish application to execute - I just get a
  398.         wish prompt!  Or I just get error msgs about permission
  399.         denied, not found, etc.
  400.  
  401. A9a. Most systems require a full pathname to the interpreter.  So you cannot
  402. start a wish script out as 
  403. #! wish -f
  404.  
  405. Likewise, many Unix systems have a maximum length of characters that you can
  406. put on a #! line.  If you exceed this, you do not get the behaviour you
  407. expect.  So do not try to put something like:
  408.  
  409. #! /projects/somethingbig/bin/sun4/wish -f
  410.  
  411. followed by your wish code.  Keep the lines short - under 30 characters is
  412. recommended.
  413.  
  414. Subject: -Q9b- get an application to also use libXt?
  415.  
  416. A9b. Tk2.1 and Xt have different X connections, and XtAppNextEvent will
  417. block is there is nothing coming from the X connection.  One way
  418. of fixing this is get the connection number of Tk using
  419.  
  420.    ConnectionNumber(Tk_Display(tk_window));
  421.  
  422. and using XtAddInput to register this with the Xt event handler.  The
  423. callback procedure for XtAddInput wrapper procedure that runs
  424. Tk_OneEvent(1).  There might be problems with Tk file sources which
  425. aren't registered with Xt.
  426.  
  427. Thanks to joe@astro.as.utexas.edu (Joe Wang) for this information.
  428.  
  429. Subject: -Q9c- ,using a machine with less than 8 bit color, run?
  430.  
  431. A9c. Tk doesn't behave very well with less than 8-bit color screens.  To
  432. try to use it, find all the places in the Tk/wish source where 
  433. DefaultDepthOfScreen is invoked to test the number of bit-planes.  Change all
  434. of these to pretend there is just 1 bit-plane, or call a procedure which
  435. monitors a Tcl variable so that it is configurable, and you should be okay.
  436.  
  437. Another alternative is to see if the server you are using has alternative
  438. visual / color models, such as static visual, etc.  One of the alternatives
  439. may allow Tk to work better.
  440.  
  441. Thanks to "Nathaniel Borenstein" <nsb@thumper.bellcore.com> for this info!
  442.  
  443. Subject: -Q9d- set X11 resources for a wish application in an app-defaults file?
  444.  
  445. A9d. Read the documentation for the option command.
  446. Then you should consider something like the following - assume the program
  447. name is xwf.
  448.  
  449. The following are two general purpose functions to put into a library:
  450.  
  451. # envVal envValName
  452. #   Looks up the envValName environment variable and returns its
  453. #   value, or {} if it does not exists
  454. proc envVal {envValName} {
  455.   global env
  456.   if [info exists env($envValName)] {return $env($envValName)} {return {}}
  457. }
  458.  
  459. # loadAppDefaults classNameList ?priority?
  460. #   Searches for the app-default files corresponding to classNames in
  461. #   the order specified by X Toolkit Intrinsics, and loads them with
  462. #   the priority specified (default: startupFile).
  463. proc loadAppDefaults {classNameList {priority startupFile}} {
  464.   set filepath "[split [envVal XUSERFILESEARCHPATH] :] \
  465.         [envVal XAPPLRESDIR] \
  466.         [split [envVal XFILESEARCHPATH] :] \
  467.         /usr/lib/X11"
  468.   foreach i $classNameList {
  469.     foreach j $filepath {
  470.       if {[file exists $j/$i]} {
  471.     option readfile $j/$i $priority; break
  472.       }
  473.     }
  474.   }
  475. }
  476.  
  477. # Now, here is what you would put into xwf:
  478.  
  479. option add Tk.BoldFont "*-lucida sans-Bold-R-Normal-*-100-*" widgetDefault
  480. loadAppDefaults {xwf XWF} userDefault
  481.  
  482. This sets a program default, then load any defaults specified in the user's
  483. default resources and finally any site or general app-defaults resource.  
  484. Of course, you would want to add some xwf command line handling to allow 
  485. the user to override things at execution time.
  486.  
  487. Subject: -Q9e- change the X11 cursor?
  488.  
  489. A9e. Here is a tip from mgc@cray.com (M. G. Christenson).
  490.  
  491. Look at /usr/include/X11/cursorfont.h for a list of available cursors.
  492. You can use the names in there by removing the 'XC_'.  
  493.  
  494. Here's a little proc I use to make my entire application go 'busy'
  495. while it's doing something. Just call it with the commands you want to
  496. execute, and the watch cursor will be displayed for the time it takes
  497. the commands to complete.  Note that any new windows will have their
  498. normal cursor.
  499.  
  500. proc busy {cmds} {
  501.     global errorInfo
  502.  
  503.     set busy {.app .root}
  504.     set list [winfo children .]
  505.     while {$list != ""} {
  506.     set next {}
  507.     foreach w $list {
  508.         set class [winfo class $w]
  509.         set cursor [lindex [$w config -cursor] 4]
  510.         if {[winfo toplevel $w] == $w || $cursor != ""} {
  511.         lappend busy [list $w $cursor]
  512.         }
  513.         set next [concat $next [winfo children $w]]
  514.     }
  515.     set list $next
  516.     }
  517.  
  518.     foreach w $busy {
  519.     catch {[lindex $w 0] config -cursor watch}
  520.     }
  521.  
  522.     update idletasks
  523.  
  524.     set error [catch {uplevel eval [list $cmds]} result]
  525.     set ei $errorInfo
  526.  
  527.     foreach w $busy {
  528.     catch {[lindex $w 0] config -cursor [lindex $w 1]}
  529.     }
  530.  
  531.     if $error {
  532.     error $result $ei
  533.     } else {
  534.     return $result
  535.     }
  536. }
  537.  
  538. Subject: -Q9f- raise or lower a window?
  539.  
  540. A9f. This is on the (semi-infinite) list of things to be done in the future.
  541. If you have the time, please go ahead and add it and submit the code and all
  542. will be grateful.
  543.  
  544. Subject: -Q9g- re-map a withdrawn window id?
  545.  
  546. A9g. Use wm deiconify <windowid>.
  547.  
  548. Subject: -Q9h- specify bitmap patterns on the command line instead of as 
  549. a file name?
  550.  
  551. A9h. You can not, at least as of June, 1992.
  552.  
  553. Subject: -Q9i- change the default class bindings?
  554.  
  555. A9i. All default class bindings for Tk widgets are initialized in
  556. $tk_library/tk.tcl.  Use this file as a guide to implement new
  557. bindings.  For instance, the following code duplicates Button 1's
  558. drag-select facility in Button 3 for all listboxes:
  559.  
  560. bind Listbox <3> {%W select from [%W nearest %y]}
  561. bind Listbox <B3-Motion> {%W select to [%W nearest %y]}
  562.  
  563. Subject: -Q9j- delete a binding?
  564.  
  565. A9j. Give an empty-string command to the "bind" invocation.  For
  566. example, to disable the Delete key in all entry fields:
  567.  
  568.     bind Entry <Delete> {}
  569.  
  570. Subject: -Q9k- change a binding while it is being executed?
  571.  
  572. A9k. As of June, 1992, this was not a safe thing to do in Tk.  It was
  573. put on the bug list by John Ousterhout to be fixed in a future version.
  574.  
  575. The solution for now is not to change the bindings, but to change
  576. something in the code they execute.  For example, keep a state variable
  577. that indicates which binding you'd like, but always have the binding
  578. call a given procedure.  Then that procedure checks the variable and
  579. executes one piece of code or another.  Or, you could just make the
  580. binding's command "eval $cmd" and then change the variable "cmd"
  581. depending on your application's state.
  582.  
  583. Subject: -Q9l- bind the arrow key on my Sun keyboard?
  584.  
  585. A9l.  You have to call it <Left> rather than <R10>.  Under X11, keys are
  586. referred to by their keysym.  One can use either xmodmap -pk or the xev
  587. program to determine what the keysym a particular key on a keyboard is
  588. currently generating.
  589.  
  590. If the keysym that is being used is not known by Tk, you may have to edit
  591. it's ks_names.h file.  There is a note in this file that indicates that
  592. one should not edit it - but this is where the keysym must be for it to
  593. be recognized.
  594.  
  595. Thanks to Wayne Christopher <faustus@ygdrasil.CS.Berkeley.EDU> for this
  596. note.
  597.  
  598. Subject: -Q9m- resize a listbox?
  599.  
  600. A9m. Use wm min/maxsize - in a uniform manner.  Here is a resizable listbox:
  601.  
  602.         #!/usr/local/bin/wish -f
  603.         wm minsize . 20 20
  604.         wm maxsize . 1152 900
  605.         pack append . [listbox .l -borderwidth 2 -relief raised] {expand fill}
  606.  
  607. Doing the same with the text widget brings its resizing under control too.
  608.  
  609. Thanks to "John C Ellson" <ellson@ontap.att.com).
  610.  
  611. Subject: -Q9n- select two items that are not adjacent in the listbox at 
  612.         one time?
  613.  
  614. A9n. You can't.  Build your own listbox using boxes and text on a canvas.
  615. Then you will be able to select non-contiguous entries.
  616.  
  617. Subject: -Q9o- select items in more than one tk listbox at a time?
  618.  
  619. A9o. The default for tk's listbox widget exports its selection as the
  620. X selection.  There can only be one of these at a time.
  621.  
  622. To turn of this behavior in tk, use the -exportselection false when
  623. you create the listbox.  Or, use the
  624.  
  625. option add *Listbox.exportselection false
  626.  
  627. command in the beginning of your script.
  628.  
  629. Thanks to David Herron <david@twg.com> for this tip.
  630.  
  631. Subject: -Q9p- fill a canvas which is bounded by lines as opposed to a
  632. shape like a polygon, oval, etc.?
  633.  
  634. A9p. No, you have to at least use a polygon if you want to fill an area
  635. bounded by some lines.
  636.  
  637. Subject: -Q9q- create a scrollable window of buttons?
  638.  
  639. A9q.  There are at least two ways to do this.  First, there is a hypertext
  640. widget that one can get from the Barkley User Contributed Code Archive which
  641. provides such a facility.  And here is some sample code from 
  642. "Michael Moore" <mdm@stegosaur.cis.ohio-state.edu> which shows a way to 
  643. do this using just Tk.
  644.  
  645. #! /bin/wish -f
  646. #
  647. # This demonstrates how to create a scrollable canvas with mutliple
  648. # buttons.
  649. #
  650. # Author : Michael Moore
  651. # Date   : November 17, 1992
  652. #
  653.  
  654. #
  655. # This procedure obtains all the items with the tag "active"
  656. # and prints out their ids.
  657.  
  658. proc multi_action {} {
  659.     set list [.frame.canvas find withtag "active"]
  660.     puts stdout "Active Item Ids : "
  661.     foreach item $list {
  662.     puts stdout $item
  663.     }
  664. }
  665.  
  666. # This simulates the toggling of a command button...
  667. # Note that it only works on a color display as is right now
  668. # but the principle is the same for b&w screens.
  669. proc multi_activate {num id} {
  670.     
  671.     set tags [.frame.canvas gettags $id]
  672.     if {[lsearch $tags "active"] != -1} {
  673.     .frame.canvas dtag $id "active"
  674.     .frame.canvas.button$num configure \
  675.         -background "#060" \
  676.         -activebackground "#080" 
  677.     } else {
  678.     .frame.canvas addtag "active" withtag $id
  679.     .frame.canvas.button$num configure \
  680.         -background "#600" \
  681.         -activebackground "#800"
  682.     }
  683.  
  684. proc setup {} {
  685.      frame .frame
  686.  
  687.      scrollbar .frame.scroll \
  688.          -command ".frame.canvas yview" \
  689.          -relief raised
  690.  
  691.      canvas .frame.canvas \
  692.          -yscroll ".frame.scroll set" \
  693.          -scrollregion {0 0 0 650} \
  694.          -relief raised \
  695.      -confine false \
  696.      -scrollincrement 25
  697.  
  698.      pack append .frame \
  699.          .frame.scroll    {left frame center filly} \
  700.          .frame.canvas    {left frame center fillx filly}
  701.  
  702.      pack append .\
  703.          .frame   {left frame center fillx filly}
  704.  
  705.      button .frame.canvas.button$i  \
  706.          -relief raised \
  707.          -text "Action" \
  708.      -command "multi_action"
  709.      .frame.canvas create window 1 25 \
  710.      -anchor w \
  711.          -window .frame.canvas.action
  712.      for {set i 2} {$i < 26} {incr i} {
  713.      button .frame.canvas.button$i  \
  714.         -relief raised \
  715.         -background "#060" \
  716.         -foreground wheat \
  717.         -activebackground "#080" \
  718.         -activeforeground wheat \
  719.         -text "Button $i" 
  720.      set id [.frame.canvas create window 1 [expr $i*25] \
  721.         -anchor w \
  722.         -window .frame.canvas.button$i]
  723.      .frame.canvas.button$i configure \
  724.         -command "multi_activate $i $id"
  725.     }
  726. }
  727.  
  728. setup
  729. -- 
  730. Larry W. Virden                 UUCP: osu-cis!chemabs!lvirden
  731. Same Mbox: BITNET: lvirden@cas  INET: lvirden@cas.org
  732. Personal: 674 Falls Place,   Reynoldsburg, OH 43068-1614
  733. -- 
  734. Larry W. Virden                 UUCP: osu-cis!chemabs!lvirden
  735. Same Mbox: BITNET: lvirden@cas  INET: lvirden@cas.org
  736. Personal: 674 Falls Place,   Reynoldsburg, OH 43068-1614
  737.